{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "7b64866b-0f27-4b58-8199-2e5fbd687063",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "train_data = pd.read_csv('空气质量指数预测挑战赛公开数据/train.csv')\n",
    "test_data = pd.read_csv('空气质量指数预测挑战赛公开数据/test.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "1c970923-ef12-44dc-a358-4c07a4f6cba4",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>stationID</th>\n",
       "      <th>PM2.5</th>\n",
       "      <th>PM10</th>\n",
       "      <th>NO</th>\n",
       "      <th>NO2</th>\n",
       "      <th>NOx</th>\n",
       "      <th>NH3</th>\n",
       "      <th>CO</th>\n",
       "      <th>SO2</th>\n",
       "      <th>O3</th>\n",
       "      <th>Benzene</th>\n",
       "      <th>Toluene</th>\n",
       "      <th>Xylene</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2018010100</td>\n",
       "      <td>0</td>\n",
       "      <td>78.43</td>\n",
       "      <td>120.06</td>\n",
       "      <td>23.79</td>\n",
       "      <td>126.91</td>\n",
       "      <td>79.66</td>\n",
       "      <td>19.88</td>\n",
       "      <td>23.79</td>\n",
       "      <td>74.95</td>\n",
       "      <td>24.63</td>\n",
       "      <td>11.18</td>\n",
       "      <td>40.92</td>\n",
       "      <td>3.21</td>\n",
       "      <td>340.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date  stationID  PM2.5    PM10     NO     NO2    NOx    NH3     CO  \\\n",
       "0  2018010100          0  78.43  120.06  23.79  126.91  79.66  19.88  23.79   \n",
       "\n",
       "     SO2     O3  Benzene  Toluene  Xylene  target  \n",
       "0  74.95  24.63    11.18    40.92    3.21   340.0  "
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "a9d3d00f-9da6-4923-850f-4d98361417b4",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>date</th>\n",
       "      <th>stationID</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2020060100</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         date  stationID\n",
       "0  2020060100          0"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_data.head(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "5e618c0c-bc8f-4532-ac83-c24c98f81964",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: >"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "train_data[train_data['stationID'] == 0]['target'].plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "08d11b6e-d6b9-4e1e-968e-d428a717196b",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "train_data['new_date'] = pd.to_datetime(train_data['date'], format='%Y%m%d%H')\n",
    "test_data['new_date'] = pd.to_datetime(test_data['date'], format='%Y%m%d%H')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "80970219-5f6c-492a-81e7-e202d5ae5598",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "train_data['new_date_hour'] = train_data['new_date'].dt.hour\n",
    "test_data['new_date_hour'] = test_data['new_date'].dt.hour"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "b1e2b979-fb7e-4a00-b446-4f37c9040504",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "mean_target = train_data.groupby(['stationID', 'new_date_hour'])['target'].mean().reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "f5e0510f-df55-44c6-83c9-1d9f009e1ab1",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "pd.merge(test_data, mean_target, \n",
    "         on=['stationID', 'new_date_hour'], how='left'\n",
    ")[['date', 'stationID', 'target']].to_csv('submit.csv', index=None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "87a02e11-b8b2-41a4-81e2-66391a77d32a",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "04d0409d-800e-40b8-98a7-8662ca6ebd7a",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3.10"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.10"
  },
  "widgets": {
   "application/vnd.jupyter.widget-state+json": {
    "state": {},
    "version_major": 2,
    "version_minor": 0
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
